








def dfp():
    gk = gfun(x0)
    if k>=maxk or norm(gk)<eps:
        return
    dk =-HK*gk
    x=x0+armijo()
    sk=x-x0
    rk=gfun(x)-gk
    if(sk.T*rk>0):
        Hk=Hk-(Hk*yk*yk.T*Hk)/(yk.T*Hk*yk)-(sk*sk.T)/(sk.T*yk)
    return dfp()
